package main

import "fmt"

func fn1(x int) {
	x = 10
}

func main() {
	// // 指针也是变量，存储的数据是两一个变量的内存地址
	// var a [3]int
	// var p *[3]int
	// p = &a
	// fmt.Printf("a的值为%v,a的地址为%p\n", a, &a)        // a的值为[0 0 0],a的地址为0xc00000c440
	// fmt.Printf("p的值为%v,类型是%T,地址为%p\n", p, p, &p) // p的值为0xc00000c440,类型是*int,地址为0xc000006028

	// // 指针类型和值类型是一一对应得，如*int,*int64,*string,*[3]int
	// // 变量都有对应的指针地址

	// // 取指针地址的值
	// // 指针可以直接操作引用变量的值
	// a := 10
	// p := &a
	// fmt.Println(p)
	// fmt.Println(*p)
	// *p = 11
	// fmt.Println(a)

	// 引用类型在分配存储空间后才能使用(make、new)
	// 指针也是引用类型，使用new给指针类型分配初始存储空间

	b := new(bool)
	var a *bool = &*b
	fmt.Printf("%T\n", a)
	fmt.Printf("%T\n", b)
	fmt.Println(*a)
	fmt.Println(*b)
	fmt.Println(b)

}
